const express = require('express');
// 引入第三方文件上传中间件
const multer = require('multer')
const app = express();
app.listen(9000, () => console.log("服务已启动"))

/**
 * express 获取请求参数
 *      方式一：
 *          获取请求参数可以使用 express本身的中间件
 *          
 *          
 *      方式二：
 *          获取导入第三方中间件、
 *              安装：npm install body-parser
 *              导入：const bodyParser = require('body-parser)
 *          中间件：
 *              app.use(bodyParser.urlencoded({ extended: false })); 
 *                  格式的数据常用于 HTML 表单提交，默认的编码类型就是 application/x-www-form-urlencoded
 *              app.use(bodyParser.json());     JSON 格式数据的请求
 *              app.use(bodyParser.text());    解析纯文本请求体。
 *      客户端请求方式：
 *          get请求：   参数获取：req.query / req.params
 *          post请求    参数获取：req.body 中间件
 */


/**
 * 1、express 获取 query 请求参数
 *      请求路径：http://127.0.0.1:9000/findByName?name=张三&age=20
 */
app.get('/findByName', (req, res) => {
    // 获取参数 req
    let { path, ip, query } = req
    console.log(path, ip, query);     // 获取请求路径、ip地、query参数
    console.log(req.get('host'));   // 获取请求头属性
    // 响应数据
    res.send('ok query')
})



/**
 * 2、express获取 body 请求参数
 *      请求路径：http://127.0.0.1:9000/findAll
 *      请求参数：{ "name":"JSON请求","username":"admin","password":"123456"}
 */
//Express 增加了内置的 bodyParser 支持，可以直接使用 express.json() 和 express.urlencoded() 
app.use(express.json()) // 解析 json
app.use(express.urlencoded({ extended: true })) // 解析 urlencoded 解析UTF-8的编码数据
app.post('/findAll', (req, res) => {
    // 获取参数
    let { path, ip, body } = req
    console.log(path, ip, body);   // 获取请求路径、ip地、qbody参数
    console.log(req.get('host'));   // 获取请求头属性
    // 响应数据
    res.send('ok body')
})




/**
 * 3、获取动态路径参数
 *    获取 http://127.0.0.1:9000/findById/1234567
 */
app.get("/findById/:id", (req, res) => {
    // 获取参数
    console.log(req.params.id);
    // 响应数据
    res.send('ok params')
})




/**
 *  4、exporess 实现文件上传
 *      1、安装第三方中间件: npm install multer
 *      2、导入文件上传中间件：const multer = require('multer')
 *      3、配置multer配置项
 */
const upload = multer({
    // dest:'./static/img' // 上传后文件存放位置
    // 自定义文件名称
    storage: multer.diskStorage({
        // 定义上传后文件的存放位置
        destination(req, file, cb) {
            cb(null, __dirname + '/static/img') // 需要手动创建存储目录
        },
        // 定义文件名称
        filename(req, file, cb) {
            cb(null, Date.now() + '_' + file.originalname)
        }
    })
})

/**
 * 5、单个文件上传 
 *    请求接口：http://127.0.0.1:9000/load
 */
// upload.single('参数key') 单文件上传、可图片、文当、视频、音频等
app.post('/load', upload.single('file'), (req, res) => {

    // 获取上传文件信息
    console.log(req.file);
    if (req.file) {
        res.send('上传成功！！！')
    } else {
        res.send('上传失败！！！')
    }
})




/**
 * 6、多个文件上传 
 *    请求接口：http://127.0.0.1:9000/loads
 */
// upload.array('参数key') 单文件上传、可图片、文当、视频、音频等
app.post('/loads', upload.array('files'), (req, res) => {
    // 获取上传文件信息
    console.log(req.files);

    if (req.files) {
        res.send('多文件上传成功！！！')
    } else {
        res.send('多文件上传失败！！！')
    }
})




/**
 * 解析所有 form-data 参数
 * 请求接口：http://127.0.0.1:9000/any
 * 参数key：all 
 */
app.post('/any', upload.any(), (req, res) => {
    console.log(req);
    res.send('ok')
})







